package com.example.demo.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.entity.Demand;
import com.example.demo.entity.vo.DemandVo;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
* <p>
*  服务类
* </p>
*
* @author cy
* @since 2020-08-01
*/
public interface DemandService {


    /**
     * @param page 页码
     * @param pageSize 页数
     * @param factor 搜索内容
     * @param price 价格排序开启 true为开启
     * @param priceAsc 价格升降序 true为降序
     * @param state 需求状态
     * @param uId 用户id
     * @param time 时间排序开启，true为开启
     * @param timeAsc 时间升降序，true为降序
     * @param timeState 时间状态，获取未报名，报名中，已结束的状态
     * @return
     */
    Page<DemandVo> listDemandsByPage(int page, int pageSize, String factor, String demandType,boolean price, boolean priceAsc,Integer state, Integer uId,boolean time, boolean timeAsc,Integer timeState);

    /**
    * 根据id查询Demand
    *
    * @param id 需要查询的Demand的id
    * @return 返回对应id的Demand对象
    * @author cy
    * @since 2020-08-01
    */
    DemandVo getDemandById(int id);

    /**
     * 根据id查询Demand
     *
     * @param id 需要查询的Demand的id
     * @return 返回对应id的Demand对象
     * @author cy
     * @since 2020-08-01
     */
    Demand getJustDemandById(int id);

    /**
    * 插入Demand
    *
    * @param demand 需要插入的Demand对象
    * @return 返回插入成功之后Demand对象的id
    * @author cy
    * @since 2020-08-01
    */
    int insertDemand(Demand demand);

    /**
    * 根据id删除Demand
    *
    * @param id 需要删除的Demand对象的id
    * @return 返回被删除的Demand对象的id
    * @author cy
    * @since 2020-08-01
    */
    int deleteDemandById(int id,int userId);

    /**
    * 根据id更新Demand
    *
    * @param demand 需要更新的Demand对象
    * @return 返回被更新的Demand对象的id
    * @author cy
    * @since 2020-08-01
    */
    int updateDemand(Demand demand);

    /**
     * 管理员通过审核需求
     *
     * @param demand 需要审核的Demand
     * @return 返回对应id的Demand对象
     * @author cy
     * @since 2020-08-01
     */
    int checkAchieve(Demand demand);

    /**
     * 文件导入
     * @param fileName
     * @param file
     * @return
     */
    int importDemand(String fileName, MultipartFile file, int userId) throws IOException;

    /**
     * 未审核的需求数量
     */
    int UncheckedNum();

}
